# -*- coding: utf-8 -*-
'''
Created on 11 de Abr de 2011

@author: Carlos Alexandre Rijo Palma Nº5608 \
         Curso: Eng Informática Regime: Diurno\
         Cadeira: Linguagens Programação 2ºANO
'''

#import Graficos
import csv
import os
import pickle
import sqlite3
import wx

#class Estatistica
#responsavel por todas as estatisticas a Base dados
class Estatistica :
    def __init__(self, nome_BD, ano):
        self.nome_BD = nome_BD
        self.ano = ano
        #self.criar_tabelas(nome_BD)
        pass
    
    #Metodo que lê e processa dos dados de uma base dados
    #através de consultas a Base dados de forma a obter o numero
    #de docentes num determinado ano
    #devolve o numero total de docentes
    #Recebe como parametro o nome da Base Dados e o ano a que se 
    #referem o numero de docentes
    def obter_nr_docentes_numDetermiAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        cmd = """SELECT COUNT(DISTINCT docente) as "Docentes"
                 FROM registo_docentes
                 WHERE ano = {0};""".format(ano)     
    
        cursor.execute(cmd)
        numeroDocentes = 0
        for linha in cursor:
            numeroDocentes = linha[0]
            return numeroDocentes
            pass
        pass
    

    #metodo que devolve uma lista com o tipo de estabelecimentos
    #por ano e devolve o nome do tipo de estabelecimento e o ano
    #a que se refere,recebe como parametro o nome da base dados e
    #um dado ano
    def listaTipoEstabAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        listaEstab =[]
        cmd = """SELECT DISTINCT (tipo_estabelecimento), ano \
                FROM registo_docentes
                WHERE ano = '{0}'""".format(ano)
        cursor.execute(cmd)
        
        for lista in cursor:
            listaEstab.append(lista)
            pass
        return listaEstab
        pass
    
    #Metodo que vai dar a estatistica com o numero total de docentes
    #por tipo de estabelecimento e por ano
    #recebe como parametro o nome da base dados e o ano
    #devolve uma lista com o nome do tipo de estabelecimento, o 
    #numero de docentes e o ano
    def totalDocentesPorTipEstabPorAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        lista = []
        listaTipoEstab = self.listaTipoEstabAno(nome_BD, ano)
        for nome_T_Est, anoR in listaTipoEstab:
            cmd = """SELECT DISTINCT docente, tipo_estabelecimento
                    FROM registo_docentes
                    WHERE ((tipo_estabelecimento) Like '{0}') and ano = {1}""".\
                    format(nome_T_Est.encode('utf-8'), ano)
            
            cursor.execute(cmd)
            numeroDocentes = 0
            verificarDocente = 0
            for linha in cursor:
                if linha[0] != verificarDocente:
                    numeroDocentes = numeroDocentes + 1
                    verificarDocente = linha[0]
                    pass
                pass
            conteudoLista = [nome_T_Est.encode('utf-8'), numeroDocentes, ano]
            lista.append(conteudoLista)
            pass
        return lista
        pass
    
    #metodo que vai dar a estatistica com o numero total de 
    #docentes por estabelecimento, recebe como parametro
    #o nome da base dados e o ano
    #e devolve uma lista com numero de docentes, o ano
    #e o nome do estabelecimento
    def totalDocentesPorEstabPorAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        lista = []        
        listaEstabAno = self.listaEstAno(nome_BD, ano)
        for nome_Est, anoR in listaEstabAno:
            #print nome_Est
            cmd = """SELECT DISTINCT docente, estabelecimento
                    FROM registo_docentes
                    WHERE ((estabelecimento) Like '{0}') and ano = {1}""".\
                    format(nome_Est.encode('utf-8'), ano)
            cursor.execute(cmd)
            numeroDocentes = 0
            verificarDocente = 0
            for linha in cursor:
                if linha[0] != verificarDocente:
                    numeroDocentes = numeroDocentes + 1
                    verificarDocente = linha[0]
                    pass
                pass
            conteudoLista = [numeroDocentes, ano, nome_Est.encode('utf-8')]
            lista.append(conteudoLista)
            pass
        return lista
        pass
    
    #Metodo que vai dar a estatistica dos docentes por grau
    #metodo que recebe como parametro o nome da base dados e 
    #o ano, devolve uma lista com numero de licenciados, o numero
    #de mestres, o numero de doutores e o numero de docentes
    def docentesPorGrau(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor() 
        
        cmd = """SELECT COUNT(DISTINCT docente) as "Docentes"
                 FROM registo_docentes
                 WHERE ano = {0};""".format(ano)
        cursor.execute(cmd)
    
        numeroDocentes = 0
        for row in cursor:
            numeroDocentes = row[0]
        
        cmd = """SELECT DISTINCT docente, grau, ano \
                FROM registo_curso \
                WHERE (((grau) Like '%licenci%')) and ano = {0}""".\
                format(ano)
        cursor.execute(cmd)
        
        numerolicenciado = 0
        for row in cursor:
            numerolicenciado = numerolicenciado +1
            
        cmd = """SELECT DISTINCT docente, grau, ano \
                FROM registo_curso \
                WHERE (((grau) Like '%mestre%')) and ano = {0}""".\
                format(ano)
        cursor.execute(cmd) 
        
        numeromestre = 0
        for row in cursor:
            numeromestre = numeromestre +1
           
        cmd = """SELECT DISTINCT docente, grau, ano \
                FROM registo_curso \
                WHERE (((grau) Like 'do%')) and ano = {0}""".\
                format(ano)
        cursor.execute(cmd)
        
        numerodoutor = 0
        for row in cursor:
            numerodoutor = numerodoutor +1
            
        conn.commit() 
        conn.close()
          
        return (numerolicenciado, numeromestre, numerodoutor, numeroDocentes)
        pass
    
    
    #metodo que devolve uma lista com os estabelecimentos num dado ano
    #devolve o nome de estabelecimento e o ano
    #recebe como parametro o nome da base dados e
    #o ano a que se rerfer
    def listaEstAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        listaEstab =[]
        cmd = """SELECT DISTINCT (estabelecimento), ano \
                FROM registo_docentes
                WHERE ano = '{0}'""".format(ano)
        cursor.execute(cmd)
        
        for lista in cursor:
            listaEstab.append(lista)
            pass
        return listaEstab
        pass
    
    #Metodo que vai dar a estatistica numero total de docentes
    #por grau e por estabelecimento, recebe como parametro
    #o nome da Base dados e o ano
    #devolve uma lista que vai conter o numero de docentes
    #o ano o estabelecimento e o grau
    #Importa ainda referir que este metodo, tem como graus,
    #licenciados, mestres e doutores
    def nrDocentPorGrauPorEstab(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor() 
        listaGraus = ["%licenci%","%mestre%","do%"]
        lista =[]
        listaEstabAno = self.listaEstAno(nome_BD, ano)
        for grau in listaGraus:    
            for nomeEstab, ano in listaEstabAno:
                cmd ="""SELECT DISTINCT (docente), ano, grau, estabelecimento \
                        FROM registo_docentes \
                        WHERE grau LIKE '{0}' AND \
                        estabelecimento LIKE '{1}' AND 
                        ano = '{2}'""".format(grau, nomeEstab.encode('utf-8'), ano)
                cursor.execute(cmd)
                numeroDocentes = 0
                verificarDocente = 0
                for linha in cursor:
                    if linha[0] != verificarDocente:
                        numeroDocentes = numeroDocentes + 1
                        grauTabela = linha[2]
                        verificarDocente = linha[0]
                        pass
                    pass
                conteudoLista = [numeroDocentes, ano, nomeEstab.encode('utf-8'), grauTabela]
                lista.append(conteudoLista)
                pass
            pass
        return lista
        pass
    
    #Metodo que devole uma lista com todos os tipos de estabelecimento
    #num dado ano, este metodo recebe como parametros o nome da 
    #base dados em questão e o ano a que se referem os dados
    #a lista que devolve vai conter o nome do tipo de estabelecimento
    #e o ano a que se refere
    def listaTipoEstabPorAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        cmd ='''SELECT DISTINCT (tipo_estabelecimento), ano
                FROM registo_docentes
               WHERE ano = '{0}' '''.format(ano)
            
        cursor.execute(cmd)
        lista1 =[]
        for row in cursor:
            nomeTipoEstab = row[0]
            ano = row[1]
            lista = [nomeTipoEstab.encode('utf-8'), '200{0}'.format(ano)]
            lista1.append(lista)
            pass
        return lista1
        pass
    
    #Metodo que devolve uma lista com os tipos de estabelecimentos
    #e os estabelecimentos num dado ano, vai receber o nome da 
    #Base dados e o ano a que se vao referir os dados
    #a lista devolte o nome do tipo Estabelecimento
    #o ano, e o estabelecimento
    def listaTipoEstab_Estab_PorAno(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor()
        lista1 =[]
        listaTipoEstab = self.listaTipoEstabAno(nome_BD, ano)
        for nomeTipoEstab, anoR in listaTipoEstab:
            cmd ='''SELECT DISTINCT (tipo_estabelecimento), ano, estabelecimento
                    FROM registo_docentes
                    WHERE tipo_estabelecimento LIKE '{0}' AND \
                       ano = '{1}' '''.format(nomeTipoEstab.encode('utf-8'), ano)
                
            cursor.execute(cmd)
            
            for row in cursor:
                nomTipEstab = row[0]
                ano = row[1]
                nomeEstab = row[2]
                lista = [nomTipEstab.encode('utf-8'), ano, nomeEstab.encode('utf-8')]
                lista1.append(lista)
                pass
            pass
        return lista1
        pass
    
    #Metodo que devolve uma lista dos titulares de cada grau
    #importa referir que os graus que estao a ser utilizado são os 
    #seguintes Licenciados, Mestres e Doutores.
    #o metodo recebe como parametro o nome da Base Dados e o ano
    #e devolve uma lista com o nome do docente, o grau correspondente e o 
    #ano a que se refere
    def listaTitularesGrau(self, nome_BD, ano):
        conn = sqlite3.connect(nome_BD)
        cursor = conn.cursor() 
        listaGraus = ["%licenci%","%mestre%","do%"]
        listaDados =[]
        for grau in listaGraus: 
            cmd = """SELECT DISTINCT (docente), grau, ano
                    FROM registo_docentes
                    WHERE grau LIKE '{0}'
                    AND ano = '{1}'""".format(grau, ano)
            cursor.execute(cmd)
            
            for row in cursor:
                docente = row[0]
                grau = row[1]
                ano = row[2]
                lista = [docente.encode('utf-8'), grau.encode('utf-8'), ano]
                listaDados.append(lista)
                pass
            pass
        return listaDados       
        pass
    
    """
    Nota: obtei por criar estes metodos dados dos eventos
        para tornar o codigo mais simples no modulo 
        rebidesLP.py(modulo onde está a ser criada a interface)
    """
    
    #Metodo que vai ser chamado no evento que mostra a 
    #estatistica do numero total de docentes, é responsavel 
    #por mostrar ao utilizador essa mesma estatistica, vai criar o 
    #ficheiro csv com a mesma estatistica, cria um ficheiro HTML
    #com a estatistica e vai fazer o system do modulo
    #GraficoNrDocentes.py que faz com que o gere o grafico
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a estatistica, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_evento_nrTotalDocentes(self, nome_BD, ano):
        nr_Docentes = self.obter_nr_docentes_numDetermiAno(nome_BD, ano)
        menssagem = "Total do número de Docentes no ensino superior no ano de 200{0} é: ".\
                    format(ano) + str(nr_Docentes) + " Docentes"            
        menssagemHTML = "Total do número de Docentes no ensino superior no ano de 200{0} é: ".\
                    format(ano) + str(nr_Docentes) + " Docentes"
        ficheiro = open('nrDocen200{0}.csv'.format(ano),"wb")
        csvwriter = csv.writer( ficheiro, delimiter=' ')
        csvwriter.writerow(str(nr_Docentes))
        ficheiro.close()
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a estatistica \
tem o nome nrDocente200{0}.csv!!\n".format(ano)
        menssagem = menssagem + "Na raiz do programa foi guardado um gráfico com o nome NumeroDocentes200{0}.png".format(ano)
        wx.MessageBox(menssagem, 'Info')
        self.escrever_Em_HTML('NrTotalDocen200{0}.html'.format(ano), menssagemHTML)
        
        ficheiro = open("mens.dat", "w")
        pickle.dump(nr_Docentes, ficheiro)
        pickle.dump(ano, ficheiro)
        ficheiro.close()
        os.system("python GraficoNrDocentes.py")
        return menssagem
        pass
            
    
    #Metodo que vai ser chamado no evento que mostra a 
    #estatistica do numero total de docentes por 
    #tipo de estabelecimento, é responsavel 
    #por mostrar ao utilizador essa mesma estatistica, vai criar o 
    #ficheiro csv com a mesma estatistica, cria um ficheiro HTML
    #com a estatistica e vai fazer o system do modulo
    #GraficoDocenTipoEstab.py que faz com que o gere o grafico
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a estatistica, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_evento_nrDocentTipoEstab(self, nome_BD, ano):
        dadosDocentes = self.totalDocentesPorTipEstabPorAno(nome_BD, ano)
        
        menssagem = "Docentes por Tipo de Estabelecimento no ano de 200{0}: \n\n".\
                            format(ano)
        menssagemHTML = "Docentes por Tipo de Estabelecimento no ano de 200{0}: <br><br>".\
                            format(ano)
        nrDocentes = []                 
        for posicao in dadosDocentes:
            menssagem = menssagem + str(posicao[0]) + " = " + str(posicao[1]) + " Docentes " + "\n"
            menssagemHTML = menssagemHTML + str(posicao[0]) + " = " + str(posicao[1]) + " Docentes " + "<br>"
            nrDocentes.append(str(posicao[1]))
            pass
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a estatistica \
tem o nome nrDocenTipoEstab{0}.csv!!\n".format(ano)
        menssagem = menssagem + "Na raiz do programa foi guardado um gráfico com o nome NumeroDocTipoEstab200{0}.png".format(ano)
            
        wx.MessageBox(menssagem, 'Info')
        self.escrever_Em_csv('nrDocenTipoEstab{0}.csv'.format(ano), dadosDocentes)
        self.escrever_Em_HTML('NrDocenTipEsta200{0}.html'.format(ano), menssagemHTML)
        
        ficheiro = open("mens.dat", "w")
        pickle.dump(ano, ficheiro)
        pickle.dump(nrDocentes, ficheiro)
        ficheiro.close()
        os.system("python GraficoDocenTipoEstab.py")
        return menssagem
        pass
    
    #Metodo que vai ser chamado no evento que mostra a 
    #estatistica do numero total de docentes por 
    #estabelecimento, é responsavel por mostrar ao utilizador
    #essa mesma estatistica, vai criar o ficheiro csv com a mesma estatistica, 
    #cria um ficheiro HTML com a estatistica
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a estatistica, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_evento_nrDocentEstab(self, nome_BD, ano):
        dadosDocentes = self.totalDocentesPorEstabPorAno(nome_BD, ano)
        menssagem = "Docentes por Estabelecimento no ano de 200{0}: \n\n".\
                    format(ano)
        menssagemHTML = "Docentes por Estabelecimento no ano de 200{0}: <br><br>".\
                    format(ano)
        
        for posicao in dadosDocentes:
            menssagem = menssagem + str(posicao[2]) + " = " + str(posicao[0]) + " Docentes " + "\n"
            menssagemHTML = menssagemHTML + str(posicao[2]) + " = " + str(posicao[0]) + " Docentes " + "<br>"
            pass
        
        self.escrever_Em_csv('nrDocenEstab{0}.csv'.format(ano), dadosDocentes)
        self.escrever_Em_HTML('NrDocenEsta200{0}.html'.format(ano), menssagemHTML)
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a estatistica \
tem o nome nrDocenEstab{0}.csv!!\n".format(ano)
        return menssagem
        pass
    
    #Metodo que vai ser chamado no evento que mostra a 
    #estatistica do numero total de docentes por 
    #grau, é responsavel por mostrar ao utilizador
    #essa mesma estatistica, vai criar o ficheiro csv com a mesma estatistica, 
    #cria um ficheiro HTML com a estatistica
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a estatistica, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_evento_docent_grau(self, nome_BD, ano):
        dados = self.docentesPorGrau(nome_BD, ano)
        menssagem = "Número total de Docentes por grau no ano de 200{0}: \n\n".\
                    format(ano)
        menssagemHTML = "Número total de Docentes por grau no ano de 200{0}: <br><br>".\
                    format(ano)
        
        menssagem = menssagem + str(dados[0]) + " Docentes sao Licenciados " + str((dados[0]*100)/dados[3]) + " por cento \n" \
            + str(dados[1]) + " Docentes sao Mestres " + str((dados[1]*100)/dados[3]) + " por cento \n" \
            + str(dados[2]) + " Docentes sao Doutor " + str((dados[2]*100)/dados[3]) + " por cento"
        
        menssagemHTML = menssagemHTML + str(dados[0]) + " Docentes sao Licenciados " + str((dados[0]*100)/dados[3]) + " por cento <br>" \
            + str(dados[1]) + " Docentes sao Mestres " + str((dados[1]*100)/dados[3]) + " por cento <br>" \
            + str(dados[2]) + " Docentes sao Doutor " + str((dados[2]*100)/dados[3]) + " por cento"
        
        ficheiro = open('nrDocenPorGrau200{0}.csv'.format(ano),"wb")
        csvwriter = csv.writer( ficheiro, delimiter = ' ')
        csvwriter.writerow("Docentes  Licenciados" + str(dados[0]))
        csvwriter.writerow("Docentes  Mestres" + str(dados[1]))
        csvwriter.writerow("Docentes  Doutores" + str(dados[2]))
        ficheiro.close()
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a estatistica \
tem o nome nrDocenPorGrau200{0}.csv!!\n".format(ano)
        wx.MessageBox(menssagem, 'Info')
        self.escrever_Em_HTML('NrDocenGrau200{0}.html'.format(ano), menssagemHTML)
        return menssagem
        pass
    
    #Metodo que vai ser chamado no evento que mostra a 
    #estatistica do numero total de docentes por grau e por
    #estabelecimento, é responsavel por mostrar ao utilizador
    #essa mesma estatistica, vai criar o ficheiro csv com a mesma estatistica, 
    #cria um ficheiro HTML com a estatistica
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a estatistica, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_evento_DocentPorGrauPorEstab(self, nome_BD, ano):
        dados = self.nrDocentPorGrauPorEstab(nome_BD, ano)
        menssagem = "Número total de Docentes por grau e por Estabelecimento no ano de 200{0}: \n\n".\
                    format(ano)
        menssagemHTML = "Número total de Docentes por grau e por Estabelecimento no ano de 200{0}: <br><br>".\
                    format(ano)
        for dadosDocentes in dados:
            menssagem = menssagem + "O número de docentes no Estabelecimento, " + str(dadosDocentes[2]) \
                + " com o grau, " + str(dadosDocentes[3]) \
                + " é igual a " + str(dadosDocentes[0]) + "\n"
            menssagemHTML = menssagemHTML + "O número de docentes no Estabelecimento, " + str(dadosDocentes[2]) \
                + " com o grau, " + str(dadosDocentes[3]) \
                + " é igual a " + str(dadosDocentes[0]) + "<br>"
            pass
        self.escrever_Em_csv('DocentPorGrauPorEstab200{0}.csv'.format(ano), dados)
        self.escrever_Em_HTML('NrDocenGrauEst200{0}.html'.format(ano), menssagemHTML)
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a estatistica \
tem o nome DocentPorGrauPorEstab200{0}.csv!!\n".format(ano)
        return menssagem
        pass
    
    #Metodo que vai ser chamado no evento que mostra  
    #a lista com todos os tipos de estabelecimentos existentes num dado ano
    #é responsavel por mostrar ao utilizador
    #essa mesma lista, vai criar o ficheiro csv e um ficheiro HTML com a lista
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a lista, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_listaTipoEstabPorAno(self, nome_BD, ano): 
        lista = self.listaTipoEstabPorAno(nome_BD, ano)
        menssagem = "Lista de Instituições no Ano 200{0}: \n\n".\
                    format(ano)
        menssagemHTML = "Lista de Instituições no Ano 200{0}: <br><br>".\
                    format(ano)
        for dadoslista in lista:
            menssagem = menssagem + str(dadoslista[0]) +  " Ano: " + (str(dadoslista[1])) + "\n"
            menssagemHTML = menssagemHTML + str(dadoslista[0]) +  " Ano: " + (str(dadoslista[1])) + "<br>"
            pass        
        self.escrever_Em_csv('LisTipEstabAno200{0}.csv'.format(ano), lista)
        self.escrever_Em_HTML('ListaTipoEstab200{0}.html'.format(ano), menssagemHTML)
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a lista \
tem o nome LisTipEstabAno200{0}.csv!!\n".format(ano)
        return menssagem
        pass
    
    #Metodo que vai ser chamado no evento que mostra  
    #a lista com todos os tipos de estabelecimentos e estabelecimentos
    #que existem num dado ano, é responsavel por mostrar ao utilizador
    #essa mesma lista, vai criar o ficheiro csv e um ficheiro HTML com a lista
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a lista, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_listaTipoEstab_Estab_PorAno(self, nome_BD, ano):
        lista = self.listaTipoEstab_Estab_PorAno(nome_BD, ano)
        menssagem = "Lista de Instituições e estabelecimentos no ano 200{0}: \n\n".\
                    format(ano)
        menssagemHTML = "Lista de Instituições e estabelecimentos no ano 200{0}: <br><br>".\
                    format(ano)
        for dadoslista in lista:
            menssagem = menssagem + "A instituição " + str(dadoslista[0])\
                        + " contêm o estabelecimento " + str(dadoslista[2]) + "\n"
            menssagemHTML = menssagemHTML + "A instituição " + str(dadoslista[0])\
                        + " contêm o estabelecimento " + str(dadoslista[2]) + "<br>"
            pass
        self.escrever_Em_csv('LisInstitu_EstabAno200{0}.csv'.format(ano), lista)
        self.escrever_Em_HTML('ListaTipoEstabEstab200{0}.html'.format(ano), menssagemHTML)
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a lista \
tem o nome LisInstitu_EstabAno200{0}.csv!!\n".format(ano)
        return menssagem
        pass
    
    
    #Metodo que vai ser chamado no evento que mostra  
    #a lista dos docentes e a que grau correspndem
    #que existem num dado ano, é responsavel por mostrar ao utilizador
    #essa mesma lista, vai criar o ficheiro csv e um ficheiro HTML com a lista
    #este metodo recebe como parametro o nome da Base dados, e o ano a 
    #se refere a lista, vai devolver a menssagem que é mostrada ao 
    #utilizador na interface...
    def dados_listaTitularesGrau(self, nome_BD, ano):
        lista = self.listaTitularesGrau(nome_BD, ano)
        menssagem = "Lista dos titulares de um grau no Ano 200{0}: \n\n".\
                    format(ano)
        menssagemHTML = "Lista dos titulares de um grau no Ano 200{0}: <br><br>".\
                    format(ano)
        for dadoslista in lista:
            menssagem = menssagem + "O docente " + str(dadoslista[0]) \
                          + " contêm o grau " + str(dadoslista[1]) + "\n"
            menssagemHTML = menssagemHTML + "O docente " + str(dadoslista[0]) \
                          + " contêm o grau " + str(dadoslista[1]) + "<br>"
            pass
        return menssagem
        self.escrever_Em_csv('LisTitulaGraus200{0}.csv'.format(ano), lista)
        self.escrever_Em_HTML('ListaTitulGrau200{0}.html'.format(ano), menssagemHTML)
        menssagem = menssagem + "\n\nNa raiz do programa foi guardado um ficheiro csv com a lista \
tem o nome LisTitulaGraus200{0}.csv!!\n".format(ano)
        pass
    
    """
    Fim dos metodos dos eventos..
    """

    #metodo para escrever as estatisticas num ficheio csv
    #recebe o nome do ficheiro onde guardar os dados
    #e uma lista com o conteudo a escrever
    def escrever_Em_csv(self, nomeFile, listaEscrever):
        '''
        escrita dos dados em ficheiro csv
        '''
        ficheiro = open(nomeFile,"wb")
        csvwriter = csv.writer( ficheiro, delimiter=',')
        
        for escreve in listaEscrever:
            csvwriter.writerow(escreve)
            pass
        ficheiro.close()
        pass
    
    #Metodo para escrever as estatisticas num ficheiro html
    #Recebe como parametro o nome do ficheiro e uma menssagem
    #com o a estatistica que deve ser apresentada ao utilizador 
    def escrever_Em_HTML(self, nomePagina, msg):
        pagina = open(nomePagina,"wb")
        pagina.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">')
        pagina.write("<html>")
        pagina.write("<head>")
        pagina.write("<title>Estatisticas Rebides - Trabalho LP 2011</title>")
        pagina.write("</head>")
        pagina.write("<body>")
        pagina.write("<h4>" + msg +"</h4>")
        pagina.write("</body>")
        pagina.write("</html>")
        pagina.close()
        pass
    
    #metodo para criar uma pagina inicial com todas as 
    #Estatisticas para cada ano
    #recebe como parametro o nome pagina
    def criarFileHTML_index(self, nomePagina):
        pagina = open(nomePagina,"wb")
        pagina.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">')
        pagina.write("<html>")
        pagina.write("<head>")
        pagina.write('<title>Estatisticas Rebides - Trabalho LP 2011</title>\
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">')
        pagina.write("</head>")
        pagina.write("<body>")
        pagina.write("<h1>Lista de todas as estatisticas</h1><br>")
        for ano in range (0, 10):
            pagina.write("<h3>Ano 200{0}</h3>".format(ano))
            pagina.write('<ul><li><a href="NrTotalDocen200{0}.html">Numero total de Docentes no ensino Superior</a></li>'.format(ano))
            pagina.write('<li><a href="NrDocenTipEsta200{0}.html">Numero Total de docentes por instituicao</a></li>'.format(ano))
            pagina.write('<li><a href="NrDocenEsta200{0}.html">Numero Total de docentes por Estabelecimento</a></li>'.format(ano))
            pagina.write('<li><a href="NrDocenGrau200{0}.html">Numero Total de docentes por Grau</a></li>'.format(ano))
            pagina.write('<li><a href="NrDocenGrauEst200{0}.html">Numero Total de docentes por Grau e por Estabelecimento</a></li>'.format(ano))
            pagina.write('<li><a href="ListaTipoEstab200{0}.html">Lista de Intituicoes</a></li>'.format(ano))
            pagina.write('<li><a href="ListaTipoEstabEstab200{0}.html">Lista de Intituicoes e Estabelecimentos</a></li>'.format(ano))
            pagina.write('<li><a href="ListaTitulGrau200{0}.html">Lista Titulares dos Graus</a></li></ul>'.format(ano))
            pass
        pagina.write("</body>")
        pagina.write("</html>")
        pagina.close()
        pass
        